The tab icon pointed straight at romeo-logo.png, which is 77% near-black
(dominant rgb(1,5,43), luminance ~7). On a dark tab bar it read as an empty
square — at 16px not a single pixel was brighter than 140, so the browser had
nothing to render. There was also no /favicon.ico, so browsers falling back to
the conventional path got a 404.
Both are fixed:
- The favicon is now the ROMeo art on a cyan->purple rounded frame, so the dark
badge separates from light and dark tab bars alike. It lives in
public/images/romeo-favicon.png and is also emitted as a multi-size
public/favicon.ico (16/24/32/48/64) for the conventional path and legacy
consumers.
- apple-touch-icon now uses a 180px opaque variant
(public/images/romeo-touch-icon.png); iOS ignores transparency and composites
onto black, which would have swallowed the badge.
Measured at 16/32/48px: contrast std ~55 and ~27-37% bright pixels on both a
white and a #202124 background, versus std ~0 and 0% bright before.
Co-authored-by: openhands <openhands@all-hands.dev>
The bug
The tab icon was pointed straight at
romeo-logo.png, which is a dark navybadge — 77% near-black (dominant
rgb(1,5,43), luminance ~7). On a dark tabbar it read as an empty square:
There was also no
/favicon.ico, so any browser falling back to theconventional path got a 404.
The fix
The favicon is now the ROMeo art on a cyan→purple rounded frame, so the dark
badge separates from light and dark tab bars.
public/favicon.icopublic/images/romeo-favicon.pngrel="icon"public/images/romeo-touch-icon.pngVerification
Contrast, measured on both a white and a
#202124background:/favicon.iconow serves200 image/vnd.microsoft.icon; the browser requestsit on load (confirmed in the Wrangler request log).
npm run buildclean,npm test50/50.This pull request was created by an AI agent (OpenHands) on behalf of the user.
Summary by CodeRabbit